#ifndef __SIGMA_POINTS_INCLUDE__
#define __SIGMA_POINTS_INCLUDE__
#include "../Eigen/Dense"
#include <functional>
#include <vector>
using namespace Eigen;

typedef struct SigmaPointsWeights {
	std::vector<double> Wm;
	std::vector<double> Wc;
}SigmaPointsWeights_t;

class MerweScaledSigmaPoints {
public:
	MerweScaledSigmaPoints(int n_, double alpha_ ,double beta_ ,double kappa_);
	virtual ~MerweScaledSigmaPoints();

	inline int num_sigmas() const ;
	std::vector<VectorXd> sigma_points(VectorXd X , MatrixXd P);
	SigmaPointsWeights_t compute_weights();
private:
	int n;
	double alpha;
	double beta;
	double kappa;
};



#endif